home *** CD-ROM | disk | FTP | other *** search
-
-
-
- ┴TARI ┴SSEMBLER ├OURSE
- (EDITED FOR ├OMMODORE)
-
- -----------------------------------
-
- 3.1 ├OMPARING AND ╘ESTING
-
- ╨ROGRAMMING INVOLVES MANY DECISIONS AND BRANCHES BASED ON THE OUTCOME OF
- TESTS. ╔N ┴SSEMBLY ╠ANGUAGE, DECISIONS ARE BASED ON THE CONDITION OF THE
- PROCESSOR STATUS FLAGS AFTER AN OPERATION. ╔N ADDITION TO THE LOGICAL
- FUNCTIONS, THE ├OMPARE AND ┬IT-TEST INSTRUCTIONS ARE USEFUL MEANS FOR
- TESTING DATA.
-
-
- 3.1.1 ╥EVIEW OF ╠OGICAL ╞UNCTIONS
-
- ┴S DISCUSSED IN ╙ECTION 2.1.5, THE ┴╬─, ╧╥, AND ┼╧╥ FUNCTIONS ARE VERY
- USEFUL TOOLS FOR MANIPULATING DATA BIT-BY-BIT. ┬UT, THESE FUNCTIONS, AND
- THE ┴─├ AND ╙┬├ INSTRUCTIONS, ALWAYS EFFECT THE CONTENTS OF THE
- ACCUMULATOR. ╓ERY OFTEN, A COMPARE OR TEST OPERATION MAY NEED TO BE DONE
- SEVERAL TIMES USING THE SAME CONSTANT. ╔N THIS CASE, THE CONSTANT WOULD
- NEED TO BE LOADED FOR EACH TEST. ╞OR THIS REASON, TWO COMMANDS WERE ADDED
- THAT DO THESE OPERATIONS WITHOUT SAVING THE RESULTS IN THE ACCUMULATOR -
- THE ├═╨ AND ┬╔╘ INSTRUCTIONS.
-
-
- 3.1.2 ├OMPARING
-
- ,-----.
- ▄ ├═╨ ▄ - ├OMPARE ═EMORY WITH ┴CC.
- '-----'
- ┴ - ═
-
- ╘HIS INSTRUCTION SUBTRACTS THE CONTENTS OF MEMORY FROM THE ACCUMULATOR.
- ╒SING THE ├═╨ EFFECTS THE ZERO, NEGATIVE AND CARRY FLAGS; THE ACCUMULATOR
- IS NOT EFFECTED. ╘HE FOLLOWING EXAMPLE COMPARES A VALUE IN MEMORY TO THREE
- CONSTANTS AND BRANCHES TO A DIFFERENT LOCATION FOR EACH:
-
- ╠─┴ $2┴0 ; VARIABLE TO TEST.
- ├═╨ #12 ;╔S IT TWELVE?...
- ┬┼╤ ─╧╔╘12 ;┘ES...╟O TO ─╧╔╘12.
- ├═╨ #66 ;╬O...THEN IS IT 66?
- ┬┼╤ ─╧╔╘66 ;┘ES...╟O TO ─╧╔╘66.
- ├═╨ #100 ;╬O...THEN IS IT 100?
- ┬┼╤ ─╧╔╘100 ;┘ES...╟O TO ─╧╔╘100.
- ; ╬O...(CONTINUE WITH PROGRAM.)
-
-
- 3.1.3 ╘ESTING ┬ITS...
-
- ,-----.
- ▄ ┬╔╘ ▄ -- ╘EST ┬ITS IN ═EMORY
- '-----' WITH ┴CCUMULATOR
- ═ ┴╬─ ┴
-
- ╘HE ┬╔╘ INSTRUCTION PERFORMS A LOGICAL ┴╬─ BETWEEN A MEMORY LOCATION AND
- THE ACCUMULATOR BUT DOES NOT STORE THE RESULT INTO THE ACCUMULATOR. ╔T DOES
- EFFECT THE ZERO, NEGATIVE AND OVERFLOW FLAGS. ╧NE USE OF THIS OPERATION IS
- ILLUSTRATED BELOW:
-
-
-
-
-
-
-
- ═┴╙╦=1 ;╠ET'S CHECK FIRST BIT...
- ╠─┴ #═┴╙╦ ;╠OAD ═┴╙╦ INTO ┴CC.
- ┬╔╘ $6╞0 ;├HECK 1ST LOCATION
- ┬╬┼ ┘┼╙1 ;╟O TO ┘┼╙1 IF BIT1 IS "1".
- ┬╔╘ $6╞1 ;╘EST SECOND LOCATION.
- ┬┼╤ ┘┼╙2 ;╟O TO ┘┼╙2 IF THE BIT IS "0".
- ;ETC...
-
-
- 3.1.4 ╘ESTING ╔NDEX ╥EGISTERS
-
- ╘HERE ARE ├OMPARE COMMANDS THAT TEST THE ╪ AND ┘ REGISTERS JUST AS THE
- ├═╨ LOOKS AT THE ACCUMULATOR. ╘HEY ARE ├╨╪ AND ├╨┘.
-
-
- ╚ERE IS A SIMPLE LOOP WITH A COMPARISON TO ┬┴╙╔├...
-
- ╔N ┬┴╙╔├:
-
- 100 ╞╧╥ ╔=1 ╘╧ 10
- 110 ...DO SOMETHING...
- 120 ╬┼╪╘ ╔
-
- ╔N ┴SSEMBLY:
-
- 100 ╠─╪ #1 ;START AT ONE.
- 110 ╠╧╧╨ ...DO SOMETHING...
- 120 ╔╬╪ ;ADD 1 TO ╪-REG.
- 130 ├╨╪ #11 ;IS IT ABOVE 10?
- 140 ┬╬┼ ╠╧╧╨ ;LOOP IF NO.
-
-
-
- 3.2 ┬RANCHING ╔NSTRUCTIONS
-
- ╘HE FOLLOWING INSTRUCTIONS ALLOW BRANCHING TO A NEW PROGRAM LOCATION
- DEPENDING ON THE CONDITION OF A STATUS FLAG. ╔F THE CONDITION IS NOT MET,
- THE PROGRAM CONTINUES WITH THE NEXT INSTRUCTION. ╘HE BRANCH INSTRUCTIONS
- ARE ESSENTIALLY THE ╔╞-╘╚┼╬-╟╧╘╧'S OF ┴SSEMBLY PROGRAMMING.
- ╘HEY ALL USE "╥ELATIVE ADDRESSING" WHICH REQUIRES A ONE BYTE OPERAND.
- ╘HIS SPECIFIES THE NUMBER OF BYTES AND THE DIRECTION TO JUMP IN THE
- PROGRAM. ┬ECAUSE OF THIS ONE-BYTE AMMOUNT, THE BRANCH CAN ONLY BE +127
- THROUGH -128. ╞ORTUNATELY, THE ┴SSEMBLER DOES THIS CALCULATION FOR US WHEN
- WE SPECIFY A LABEL AS THE OPERAND.
-
- 3.2.1 ┬┼╤/┬╬┼ - ┬RANCH IF ┼QUAL OR ╬OT-┼QUAL
-
- ,-----.
- ▄ ┬┼╤ ▄ - ┬RANCH ON ╥ESULT = ┌ERO
- '-----'
- ? ┌ = 1
-
- ,-----.
- ▄ ┬╬┼ ▄ - ┬RANCH ON ╥ESULT <> ┌ERO
- '-----'
- ? ┌ = 0
-
-
-
-
-
-
-
-
-
-
- 3.2.2 ┬├├/┬├╙ - ┬RANCH IF
- ╟REATER OR ╠ESS-╘HAN
-
- ,-----.
- ▄ ┬├├ ▄ -- ┬RANCH ON ├ARRY ├LEAR
- '-----'
- ? ├ = 0
-
- ,-----.
- ▄ ┬├╙ ▄ -- ┬RANCH ON ├ARRY ╙ET
- '-----'
- ? ├ = 1
-
-
- 3.2.3 ┬RANCH IF ╨OSITIVE
- OR ╬EGATIVE
-
- ,-----.
- ▄ ┬╨╠ ▄ -- ┬RANCH ON ╥ESULT ╨LUS
- '-----'
- ? ╬ = 0
-
- ,-----.
- ▄ ┬═╔ ▄ -- ┬RANCH ON ╥ESULT ═INUS
- '-----'
- ? ╬ = 1
-
-
- ╚ERE'S AN EXAMPLE THAT LOOKS AT THE
- FRONT JOYSTICK ON THE '64 SO THAT SOME
- PARTICULAR ACTION MAY TAKE PLACE:
- ╬OTICE THAT THE SWITCHES OF THE
- JOYSTICK MAY A PARTICULAR BIT 0,
- SO "BRANCH IF NOT TRUE" IS "BNE".
-
- ╩╧┘╞=$─├01
- ╞╔╥┼=$10 ;╞IRE BUTTON IS 4TH BIT.
- ─╧╫╬=2 ;─OWN IS FIRST BIT.
- ╒╨=1 ;╒P IS ZEROTH BIT.
- ;THE BIT=0 WHEN PRESSED.
- ╞╬╘┼╙╘ ╠─┴ #╞╔╥┼ ;╠OAD BIT4 MASK
- ┬╔╘ ╩╧┘╞ ;<╞╔╥┼> HIT?
- ┬╬┼ ╞╬╘┼╙╘1 ;NOPE.
- ...CODE... ;YES, DO STUFF
- ...CODE... ;FOR FIRE.
- ╞╬╘┼╙╘1 ╠─┴ ╙┼╠╦┼┘ ;╠OAD BIT2 MASK
- ┬╔╘ ╩╧┘╞ ;<─╧╫╬> HIT?
- ┬╬┼ ╞╬╘┼╙╘2 ;NOT YET.
- ...CODE... ;YES, DO STUFF
- ...CODE... ;FOR DOWN.
- ╞╬╘┼╙╘2 ╠─┴ ╙╘╥╦┼┘ ;╠OAD BIT1 MASK
- ┬╔╘ ╩╧┘╞ ;<╒╨> HIT?
- ┬╬┼ ╞╬╘┼╙╘3 ;NONE OF 'EM.
- ...CODE... ;YES, DO STUFF
- ...CODE... ;FOR UP.
- ╞╬╘┼╙╘3 ;CONTINUE OR TEST AGAIN.
-
-
- ╬OTE THAT ╔ CHOSE TO BRANCH AROUND THE CODE WHEN THE TEST WAS FALSE INSTEAD
- OF BRANCHING TO THE CODE WHEN TRUE.
-
-
-
-
-
-
- 3.3 ├ONTROL AND ╙TRUCTURE OF PROGRAMMING IN ┴SSEMBLER
-
- ┴S IN ANY PROGRAMMING LANGUAGE, IT IS IMPORTANT TO ORGANIZE YOUR CODE IN
- A LOGICAL AND STRUCTURED MANNER. ╔N ┴SSEMBLY ╠ANGUAGE, THIS REQUIRES MUCH
- MORE DETAIL AND, THEREFORE, LEAVES MORE ROOM FOR ERROR. ╘HE BEST WAY TO
- MINIMIZE THIS ERROR IS TO DEFINE THE FUNCTIONS OF YOUR PROGRAM IN GENERAL
- TERMS THEN BEGIN TO BUILD UP MORE DETAIL. ╧RGANIZE THE FLOW OF THE
- APPLICATION BEFORE HITTING THE KEYBOARD!
- ╘HE USE OF MEANINGFUL SUBROUTINES HELPS OUT IN ANY LANGUAGE. ╔N THE NEXT
- SESSION, WE'LL DISCUSS THE USE OF SUBROUTINES AND THE "STACK".
-
-